home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Shareware Grab Bag
/
Shareware Grab Bag.iso
/
090
/
pctj8301.arc
/
DATEDEMO.PAS
next >
Wrap
Pascal/Delphi Source File
|
1986-09-14
|
3KB
|
110 lines
PROGRAM DATEDEMO(INPUT,OUTPUT);
CONST
SLASH = '/';
BASE_YEAR = 80;
TYPE
DATE_TYPE = STRING(8);
VAR
REQ_DATE:DATE_TYPE;
PACKED_VALUE:WORD;
PROCEDURE PACK_DATE(DATE_STRING:DATE_TYPE;
VAR DATE_WORD:WORD);
VAR
START_POSITION:INTEGER;
SLASH_POSITION:INTEGER;
TEMP_WORD:WORD;
TEMP_STRING:LSTRING(2);
SUCCESS:BOOLEAN;
BEGIN {PACK_DATE}
DATE_WORD := 0;
START_POSITION := 1;
SLASH_POSITION := POSITN(SLASH,DATE_STRING,START_POSITION);
MOVEL(ADR DATE_STRING[START_POSITION],ADR TEMP_STRING[1],WRD(SLASH_POSITION - START_POSITION));
TEMP_STRING.LEN := LOBYTE(SLASH_POSITION - START_POSITION);
SUCCESS := DECODE(TEMP_STRING,TEMP_WORD);
DATE_WORD := DATE_WORD + (TEMP_WORD * 32);
START_POSITION := SLASH_POSITION + 1;
TEMP_WORD := 0;
SLASH_POSITION := POSITN(SLASH,DATE_STRING,START_POSITION);
MOVEL(ADR DATE_STRING[START_POSITION],ADR TEMP_STRING[1],WRD(SLASH_POSITION - START_POSITION));
TEMP_STRING.LEN := LOBYTE(SLASH_POSITION - START_POSITION);
SUCCESS := DECODE(TEMP_STRING,TEMP_WORD);
DATE_WORD := DATE_WORD + TEMP_WORD;
START_POSITION := SLASH_POSITION + 1;
TEMP_WORD := 0;
MOVEL(ADR DATE_STRING[START_POSITION],ADR TEMP_STRING[1],2);
TEMP_STRING.LEN := 2;
SUCCESS := DECODE(TEMP_STRING,TEMP_WORD);
IF TEMP_WORD < BASE_YEAR
THEN DATE_WORD := DATE_WORD + (((100 - BASE_YEAR) + TEMP_WORD) * 512)
ELSE DATE_WORD := DATE_WORD + ((TEMP_WORD - BASE_YEAR) * 512);
END; {PACK_DATE}
PROCEDURE UNPACK_DATE(VAR DATE_STRING:DATE_TYPE;
DATE_WORD:WORD);
VAR
TEMP_WORD:WORD;
TEMP_STRING:LSTRING(2);
SUCCESS:BOOLEAN;
BEGIN {UNPACK_DATE}
DATE_STRING := ' ';
TEMP_WORD := (DATE_WORD AND 16#01E0) DIV 32;
SUCCESS := ENCODE(TEMP_STRING,TEMP_WORD:2);
MOVEL(ADR TEMP_STRING[1],ADR DATE_STRING[1],2);
DATE_STRING[3] := SLASH;
TEMP_WORD := (DATE_WORD AND 16#001F);
SUCCESS := ENCODE(TEMP_STRING,TEMP_WORD:2);
IF TEMP_STRING[1] = ' ' THEN TEMP_STRING[1] := '0';
MOVEL(ADR TEMP_STRING[1],ADR DATE_STRING[4],2);
DATE_STRING[6] := SLASH;
TEMP_WORD := ((DATE_WORD AND 16#FE00) DIV 512);
IF TEMP_WORD < (100 - BASE_YEAR)
THEN TEMP_WORD := TEMP_WORD + BASE_YEAR
ELSE TEMP_WORD := TEMP_WORD + BASE_YEAR - 100;
SUCCESS := ENCODE(TEMP_STRING,TEMP_WORD:2);
IF TEMP_STRING[1] = ' ' THEN TEMP_STRING[1] := '0';
MOVEL(ADR TEMP_STRING[1],ADR DATE_STRING[7],2);
END; {UNPACK_DATE}
BEGIN {DATEDEMO}
REPEAT
PACKED_VALUE := 0;
WRITE(OUTPUT,'Enter the date [MM/DD/YY]: ');
READLN(INPUT,REQ_DATE);
IF REQ_DATE = 'END ' THEN CYCLE;
PACK_DATE(REQ_DATE,PACKED_VALUE);
WRITELN(OUTPUT,' ');
WRITELN(OUTPUT,' The packed value for ',REQ_DATE,' IS ',PACKED_VALUE);
WRITELN(OUTPUT,' ');
REQ_DATE := ' ';
UNPACK_DATE(REQ_DATE,PACKED_VALUE);
WRITELN(OUTPUT,' The unpacked string for ',PACKED_VALUE,' IS ',REQ_DATE);
WRITELN(OUTPUT,' ');
WRITELN(OUTPUT,'-------------------------');
UNTIL REQ_DATE = 'END ';
WRITELN(OUTPUT,' ');
WRITELN(OUTPUT,'End of DATEDEMO program');
END. {DATEDEMO}